﻿using System;

namespace Kyoh.Lib.Excel
{
    /// <summary>Microsoft Excel で現在開いているすべての Workbook オブジェクトのコレクションです。</summary>
	public class Workbooks : Component
	{
		private Workbooks(object exWorkbooks, Component parent)
			: base(exWorkbooks, parent)
		{
		}

        /// <summary>Excel COM オブジェクトで、新しいインスタンスを初期化します。</summary>
        /// <param name="obj">Excel COM オブジェクト</param>
        /// <param name="parent">親となる <see cref="Component"/> オブジェクト。</param>
		internal static Workbooks Create(object obj, Component parent)
		{
			return obj == null ? null : new Workbooks(obj, parent);
		}

        /// <summary>ワークブックを開きます。</summary>
        /// <param name="path">ワークブックのファイル名。</param>
        /// <returns>開いたワークブック。</returns>
		public Workbook Open(string path)
		{
			return Open(path, false);
		}

        /// <summary>ワークブックを読み取り専用で開きます。</summary>
        /// <param name="path">ワークブックのファイル名。</param>
        /// <param name="readOnly">読み取り専用で開く場合は <c>true</c> 。</param>
        /// <returns>開いたワークブック。</returns>
        public Workbook Open(string path, bool readOnly)
		{
			return Workbook.Create(base.InvokeMethod("Open",
				path			// string Filename,
			  , Type.Missing	// object UpdateLinks,
			  , readOnly		// object ReadOnly,
			  , Type.Missing	// object Format,
			  , Type.Missing	// object Password,
			  , Type.Missing	// object WriteResPassword,
			  , Type.Missing	// object IgnoreReadOnlyRecommended,
			  , Type.Missing	// object Origin,
			  , Type.Missing	// object Delimiter,
			  , Type.Missing	// object Editable,
			  , Type.Missing	// object Notify,
			  , Type.Missing	// object Converter,
			  , Type.Missing	// object AddToMru,
			  , Type.Missing	// object Local,
			  , Type.Missing	// object CorruptLoad
			  ), this);
		}

        /// <summary>新しいワークブックを作成します。</summary>
        /// <returns>作成した <see cref="Workbook"/> オブジェクト。</returns>
		public Workbook Add()
		{
			return Workbook.Create(base.InvokeMethod("Add",
					Type.Missing // object Template
				), this);
		}
	}
}
